Java 26일 코스 - Day 3: 연산자와 형변환

Day 3: 연산자와 형변환

연산자는 데이터를 가공하는 기호입니다. Java는 산술, 비교, 논리, 대입, 비트 연산자 등 다양한 연산자를 제공합니다. 또한 서로 다른 자료형 사이의 변환(형변환)을 이해하는 것이 중요합니다.

산술 연산자와 대입 연산자

기본적인 수학 연산과 복합 대입 연산자를 알아봅니다.

public class ArithmeticOperator {
    public static void main(String[] args) {
        int a = 17;
        int b = 5;

        System.out.println("덧셈: " + (a + b));   // 22
        System.out.println("뺄셈: " + (a - b));   // 12
        System.out.println("곱셈: " + (a * b));   // 85
        System.out.println("나눗셈: " + (a / b)); // 3 (정수 나눗셈)
        System.out.println("나머지: " + (a % b)); // 2

        // 복합 대입 연산자
        int score = 100;
        score += 10;  // score = score + 10 -> 110
        score -= 20;  // score = score - 20 -> 90
        score *= 2;   // score = score * 2  -> 180
        score /= 3;   // score = score / 3  -> 60
        System.out.println("최종 점수: " + score);

        // 증감 연산자
        int count = 5;
        System.out.println(count++); // 5 (후위: 출력 후 증가)
        System.out.println(count);   // 6
        System.out.println(++count); // 7 (전위: 증가 후 출력)
    }
}

비교 연산자와 논리 연산자

조건을 판단할 때 사용하는 연산자들입니다.

public class ComparisonLogicalOperator {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        // 비교 연산자 (결과: boolean)
        System.out.println(x == y);  // false
        System.out.println(x != y);  // true
        System.out.println(x > y);   // false
        System.out.println(x < y);   // true
        System.out.println(x >= 10); // true
        System.out.println(x <= 5);  // false

        // 논리 연산자
        boolean isAdult = true;
        boolean hasMoney = false;

        System.out.println(isAdult && hasMoney); // false (AND: 둘 다 true여야)
        System.out.println(isAdult || hasMoney); // true  (OR: 하나만 true여도)
        System.out.println(!isAdult);            // false (NOT: 반전)

        // 삼항 연산자
        int age = 17;
        String status = (age >= 18) ? "성인" : "미성년자";
        System.out.println(status); // "미성년자"
    }
}

자동 형변환 (묵시적 변환)

작은 자료형에서 큰 자료형으로 변환할 때 자동으로 이루어집니다. 데이터 손실이 없습니다.

public class AutoCasting {
    public static void main(String[] args) {
        // 자동 형변환: byte -> short -> int -> long -> float -> double
        byte byteVal = 10;
        int intVal = byteVal;      // byte -> int (자동)
        long longVal = intVal;     // int -> long (자동)
        double doubleVal = longVal; // long -> double (자동)

        System.out.println("byte -> int: " + intVal);
        System.out.println("int -> long: " + longVal);
        System.out.println("long -> double: " + doubleVal);

        // 연산 시 자동 형변환
        int num = 10;
        double result = num / 4.0;  // int가 double로 자동 변환
        System.out.println("10 / 4.0 = " + result); // 2.5

        // 주의: 정수끼리 나누면 정수
        System.out.println("10 / 4 = " + (10 / 4)); // 2 (소수점 버림)
    }
}

강제 형변환 (명시적 변환)

큰 자료형에서 작은 자료형으로 변환할 때는 캐스팅 연산자를 사용해야 합니다.

public class ExplicitCasting {
    public static void main(String[] args) {
        // 강제 형변환: 데이터 손실 가능!
        double pi = 3.14159;
        int intPi = (int) pi;       // 소수점 버림
        System.out.println("double -> int: " + intPi); // 3

        long bigNumber = 300;
        byte smallByte = (byte) bigNumber; // 범위 초과 시 데이터 손실
        System.out.println("long -> byte: " + smallByte); // 44 (오버플로우)

        // 문자열 <-> 숫자 변환
        String numStr = "123";
        int parsed = Integer.parseInt(numStr);       // String -> int
        double parsedD = Double.parseDouble("3.14"); // String -> double
        String back = String.valueOf(parsed);        // int -> String
        String back2 = "" + parsed;                  // int -> String (간편)

        System.out.println("파싱: " + parsed);
        System.out.println("문자열: " + back);

        // char와 int 변환
        char ch = 'A';
        int ascii = ch;          // 65
        char fromInt = (char) 66; // 'B'
        System.out.println("A의 ASCII: " + ascii);
        System.out.println("66의 문자: " + fromInt);
    }
}

오늘의 연습문제

  1. 온도 변환기: 섭씨 온도(double)를 입력받아 화씨로 변환하는 프로그램을 작성하세요. 공식: 화씨 = 섭씨 * 9.0 / 5.0 + 32. 정수 나눗셈 함정을 피하세요.

  2. 짝수 홀수 판별: 정수 변수를 선언하고 삼항 연산자를 사용하여 짝수인지 홀수인지 판별하는 프로그램을 작성하세요. (% 연산자 활용)

  3. 오버플로우 실험: Integer.MAX_VALUE에 1을 더하면 어떤 값이 되는지 출력해보세요. byte 타입에 200을 캐스팅하면 어떤 값이 되는지 확인하고, 왜 그런 결과가 나오는지 주석으로 설명하세요.

이 글이 도움이 되었나요?